home *** CD-ROM | disk | FTP | other *** search
Oberon Text | 1994-08-12 | 7.2 KB | 158 lines | [TEXT/.Ob4] |
- Syntax10.Scn.Fnt
- StampElems
- Alloc
- 12 Aug 94
- Syntax12.Scn.Fnt
- MODULE Miscellaneous; (* mf 29.9.93 *) (* mah
- IMPORT
- Kernel, Files, MacFiles, Viewers, Fonts, Texts, MenuViewers, TextFrames, Oberon;
- CONST
- TAB=9X; EOL=0DX;
- Menu="System.Close System.Copy System.Grow";
- W: Texts.Writer;
- PROCEDURE CountLines*;
- VAR R: Texts.Reader; S: Texts.Scanner; T, source: Texts.Text; V: Viewers.Viewer;
- nofLines, totalLines, i: LONGINT; X, Y: INTEGER; ch: CHAR;
- BEGIN Oberon.AllocateUserViewer(Oberon.Par.vwr.X, X, Y); T:=TextFrames.Text("");
- V:=MenuViewers.New(TextFrames.NewMenu("Miscellaneous.CountLines", Menu), TextFrames.NewText(T, 0), TextFrames.menuH, X, Y);
- totalLines:=0; Texts.OpenScanner(S, Oberon.Par.text, Oberon.Par.pos); Texts.Scan(S);
- WHILE S.class=Texts.Name DO Texts.WriteString(W, S.s); Texts.Append(T, W.buf);
- NEW(source); Texts.Open(source, S.s); Texts.WriteString(W," counting"); Texts.Append(T, W.buf);
- Texts.OpenReader(R, source, 0); nofLines:=0; i:=0;
- WHILE i < source.len DO Texts.Read(R, ch); INC(i);
- IF ch=EOL THEN
- LOOP Texts.Read(R, ch); INC(i);
- IF ch#EOL THEN EXIT END
- END;
- INC(nofLines)
- END
- END;
- Texts.Write(W, " "); Texts.WriteInt(W, nofLines, 1); Texts.WriteLn(W); Texts.Append(T, W.buf);
- INC(totalLines, nofLines); Texts.Scan(S)
- END;
- Texts.WriteInt(W, totalLines, 1); Texts.WriteLn(W); Texts.Append(T, W.buf)
- END CountLines;
- PROCEDURE GetObjSize*;
- VAR S: Texts.Scanner; T: Texts.Text; f: Files.File; R: Files.Rider; V: Viewers.Viewer; X, Y, symSize: INTEGER;
- constSize, varSize, codeSize, totalConstSize, totalVarSize, totalCodeSize: LONGINT;
- BEGIN Oberon.AllocateUserViewer(Oberon.Par.vwr.X, X, Y); T:=TextFrames.Text("");
- V:=MenuViewers.New(TextFrames.NewMenu("Miscellaneous.GetObjSize", Menu), TextFrames.NewText(T, 0), TextFrames.menuH, X, Y);
- totalVarSize:=0; totalConstSize:=0; totalCodeSize:=0; Texts.OpenScanner(S, Oberon.Par.text, Oberon.Par.pos); Texts.Scan(S);
- WHILE S.class=Texts.Name DO Texts.WriteString(W, S.s); Texts.Append(T, W.buf);
- f:=Files.Old(S.s);
- IF f#NIL THEN Files.Set(R, f, 2); Files.ReadBytes(R, symSize, 2); Files.Set(R, f, 8+symSize);
- Files.ReadNum(R, constSize); Files.ReadNum(R, codeSize); Files.ReadNum(R, varSize);
- Texts.WriteString(W, " var "); Texts.WriteInt(W, varSize, 1);
- Texts.WriteString(W, " const "); Texts.WriteInt(W, constSize, 1);
- Texts.WriteString(W, " code "); Texts.WriteInt(W, codeSize, 1);
- INC(totalVarSize, varSize); INC(totalConstSize, constSize); INC(totalCodeSize, codeSize)
- ELSE Texts.WriteString(W, " not found")
- END;
- Texts.WriteLn(W); Texts.Append(T, W.buf); Texts.Scan(S)
- END;
- Texts.WriteString(W, " var "); Texts.WriteInt(W, totalVarSize, 1);
- Texts.WriteString(W, " const "); Texts.WriteInt(W, totalConstSize, 1);
- Texts.WriteString(W, " code "); Texts.WriteInt(W, totalCodeSize, 1); Texts.WriteLn(W);
- Texts.WriteInt(W, totalVarSize+totalConstSize+totalCodeSize, 1); Texts.WriteLn(W); Texts.Append(T, W.buf)
- END GetObjSize;
- PROCEDURE MakeText*;
- VAR par: Oberon.ParList; R: Texts.Reader; S: Texts.Scanner; source: Texts.Text; g: Files.File; Wg: Files.Rider; ch: CHAR;
- n: ARRAY 36 OF CHAR; i: INTEGER; err : BOOLEAN;
- res: INTEGER;
- BEGIN Texts.WriteString(W, "Miscellaneous.MakeText"); Texts.WriteLn(W); Texts.Append(Oberon.Log, W.buf);
- Texts.OpenScanner(S, Oberon.Par.text, Oberon.Par.pos); Texts.Scan(S);
- WHILE S.class=Texts.Name DO Texts.WriteString(W, S.s); Texts.Append(Oberon.Log, W.buf);
- NEW(source); Texts.Open(source, S.s); Texts.WriteString(W," converting"); Texts.Append(Oberon.Log, W.buf);
- n[0]:="*"; i:=0; REPEAT ch:=S.s[i]; INC(i); n[i]:=ch UNTIL ch=0X;
- g:=Files.New(n); Files.Set(Wg, g, 0);
- Texts.OpenReader(R, source, 0); Texts.Read(R, ch);
- WHILE ch#0X DO
- IF ch < 7FX THEN
- IF ch="_" THEN Files.Write(Wg, "-")
- ELSIF ch="-" THEN Files.Write(Wg, 0D0X)
- ELSIF (ch >= " ") OR (ch=TAB) OR (ch=EOL) THEN Files.Write(Wg, ch) END
- ELSE
- CASE ch OF
- | 80X: ch:=80X (*Ae*)
- | 81X: ch:=85X (*Oe*)
- | 82X: ch:=86X (*Ue*)
- | 83X: ch:=8AX (*ae*)
- | 84X: ch:=9AX (*oe*)
- | 85X: ch:=9FX (*ue*)
- | 86X: ch:=89X (*a circonflex*)
- | 87X: ch:=90X (*e circonflex*)
- | 88X: ch:=94X (*i circonflex*)
- | 89X: ch:=99X (*o circonflex*)
- | 8AX: ch:=9EX (*u circonflex*)
- | 8BX: ch:=88X (*a grave*)
- | 8CX: ch:=8FX (*e grave*)
- | 8DX: ch:=93X (*i grave*)
- | 8EX: ch:=97X (*o grave*)
- | 8FX: ch:=9DX (*u grave*)
- | 90X: ch:=8EX (*e aigue*)
- | 91X: ch:=91X (*e dieresis*)
- | 92X: ch:=95X (*i dieresis*)
- | 93X: ch:=8DX (*c cedille*)
- | 94X: ch:=87X (*a aigue*)
- | 95X: ch:=96X (*n tilde*)
- ELSE
- END;
- Files.Write(Wg, ch)
- END;
- Texts.Read(R, ch)
- END;
- Files.Register(g); MacFiles.ChangeType(n, 54455854H, res); (* TEXT *)
- MacFiles.ChangeCreator(n, 45444954H, res); (* EDIT *) (*<<<< mah 20.7.94 *)
- Texts.WriteInt(W, Files.Pos(Wg), 6); Texts.WriteLn(W); Texts.Append(Oberon.Log, W.buf); Texts.Scan(S)
- END
- END MakeText;
- PROCEDURE ConvertBlanks*;
- VAR R: Texts.Reader; S: Texts.Scanner; source: Texts.Text; g: Files.File; Wg: Files.Rider; ch: CHAR;
- BEGIN Texts.WriteString(W, "Miscellaneous.ConvertBlanks"); Texts.WriteLn(W); Texts.Append(Oberon.Log, W.buf);
- Texts.OpenScanner(S, Oberon.Par.text, Oberon.Par.pos); Texts.Scan(S);
- WHILE S.class=Texts.Name DO Texts.WriteString(W, S.s); Texts.Append(Oberon.Log, W.buf);
- NEW(source); Texts.Open(source, S.s);
- IF source.len#0 THEN Texts.WriteString(W," converting"); Texts.Append(Oberon.Log, W.buf);
- g:=Files.New(S.s); Texts.OpenReader(R, source, 0); Files.Set(Wg, g, 0);
- LOOP
- LOOP
- Texts.Read(R, ch); IF ch#" " THEN EXIT END;
- Texts.Read(R, ch); IF ch#" " THEN Files.Write(Wg, " "); EXIT END;
- Files.Write(Wg, TAB)
- END;
- WHILE (ch#0X) & (ch#EOL) DO Files.Write(Wg, ch); Texts.Read(R, ch) END;
- IF ch=0X THEN EXIT END;
- Files.Write(Wg, EOL)
- END;
- Files.Register(g)
- ELSE Texts.WriteString(W, " not found")
- END;
- Texts.WriteLn(W); Texts.Append(Oberon.Log, W.buf); Texts.Scan(S)
- END
- END ConvertBlanks;
- PROCEDURE ConvertTabs*;
- VAR R: Texts.Reader; S: Texts.Scanner; source: Texts.Text; g: Files.File; Wg: Files.Rider; ch: CHAR;
- BEGIN Texts.WriteString(W, "Miscellaneous.ConvertTabs"); Texts.WriteLn(W); Texts.Append(Oberon.Log, W.buf);
- Texts.OpenScanner(S, Oberon.Par.text, Oberon.Par.pos); Texts.Scan(S);
- WHILE S.class=Texts.Name DO Texts.WriteString(W, S.s); Texts.Append(Oberon.Log, W.buf);
- NEW(source); Texts.Open(source, S.s);
- IF source.len#0 THEN Texts.WriteString(W," reconverting"); Texts.Append(Oberon.Log, W.buf);
- g:=Files.New(S.s); Texts.OpenReader(R, source, 0); Files.Set(Wg, g, 0);
- LOOP
- LOOP Texts.Read(R, ch);
- IF ch#TAB THEN EXIT END;
- Files.Write(Wg, " "); Files.Write(Wg, " ")
- END;
- WHILE (ch#0X) & (ch#EOL) DO Files.Write(Wg, ch); Texts.Read(R, ch) END;
- IF ch=0X THEN EXIT END;
- Files.Write(Wg, EOL)
- END;
- Files.Register(g)
- ELSE Texts.WriteString(W, " not found")
- END;
- Texts.WriteLn(W); Texts.Append(Oberon.Log, W.buf); Texts.Scan(S)
- END
- END ConvertTabs;
- BEGIN Texts.OpenWriter(W)
- END Miscellaneous.
-